package einlesenUndDatenverwaltung;
import java.util.Enumeration;
import java.util.Vector;



/**
 * Die Klasse StudentenListe baut Objekte des Typs
 * Studentenliste, Sie fuegt einzelne Studentenobjekte hinzu und gibt diese
 * zurueck.
 * 
 * @author (Daniel Uhlig)
 * @version (17.1.2014)
 */
public class StudentenListe{
	// Studentenobjekt
	private Student student;
	// Vector fuer Studentenobjekte
	private Vector<Student> studentenliste;
	
	/**
	 * Konstrutor zum Erzeugen der Objekte vom Typ StudentenListe.
	 */
	public StudentenListe() {
		studentenliste = new Vector();
	}

	/**
	 * Methode fuer die Rueckgabe des Studentenvectors.
	 * 
	 * @return studentenliste (Vector)
	 */
	public Vector<Student> getStudentenliste() {
		return studentenliste;
	}
	
	/**
	 * Methode zum Hinzufuegen eines Vectors Kursliste zum Vector Kursliste.
	 * 
	 * @param kl
	 *            (Kursliste) - die hinzu zu fuegende Kursliste
	 */
	public void addKursListeToKursListe(StudentenListe kl) {

		studentenliste.addAll(kl.getStudentenliste());

	}
	
	/**
	 * Methode zum Setzen des Vectors studentenliste.
	 * 
	 * @param studentenliste Vector
	 */
	public void setStudentenliste(Vector<Student> studentenliste) {
		this.studentenliste = studentenliste;
	}



	/**
	 * Methode zum hinzufuegen von Studentenobjekten mit dem Eingabewert vom Typ
	 * Student.
	 * 
	 * @param student
	 *            (Student)
	 */
	public void addElement(Student student) {
		// Abfrage ob ein Objekt schon im Vector enthalten ist.
		if (!studentenliste.contains(student)) {
			// Hinzufuegen des Objektes, da Objekt noch nicht enthalten ist.
			studentenliste.addElement(student);
		} else {
			// Fehlerausgabe, da Objekt schon enthalten.
			System.out
					.println("Fehler! Studentenobjekt mit der Attributsbelegung Namen '"
							+ student.getName() + "' schon enthalten");
		}

	}


	/**
	 * Gibt die Anzahl der Studentenobjekte zurueck.
	 * 
	 * @return Anzahl als int.
	 */
	public int anzStudenten() {
		return studentenliste.size();
	}

	/**
	 * Methode zur Rueckgabe von Studentobjekten nach Matrikelnummer.
	 * 
	 * @param in_Nummer
	 *            (int) Matrikelnummer
	 * @return (Student)- ein Studentenobjekt
	 */
	public Student getStudent(int in_Nummer) {
		//darf nur ausgefuehrt werden wenn Student in Vector ist!
		//return (Student) studentenliste.elementAt(in_Nummer - 1);
		Student st = new Student();
		st = null;
		for (int i = 0; i < studentenliste.size(); i++) {
			if (studentenliste.elementAt(i).getMatrikelnummer() == in_Nummer) {
				st = studentenliste.elementAt(i);
			}
		}
		return st;
	}

	/**
	 * Methode zur Rueckgabe von Studentobjekten an bestimmten Index.
	 * 
	 * @autor Kerstin Schulze
	 * @param in_Nummer
	 *            (int)- Index
	 * @return (Student)- das Studentenobjekt am Studentenobjekt
	 */
	public Student getStudentAtIndex(int in_Nummer) {
		return (Student) studentenliste.elementAt(in_Nummer);
	}
	
	/**
	 * 
	 * 
	 * ToString Methode fuer Studentenlisten, wird fuer die
	 * Ausgabe der Studentenlisten als String bzw. zum Schreiben in die
	 * Dateien verwendet.
	 * 
	 * @author Kerstin Schulze
	 * @return str (String) der Ausgabestring
	 */
	public String toString() {
		String str = new String();
		if (studentenliste.size() > 0) {
			// Schleife, die alle Objekte der Studentenliste durchlaeuft
			for (Enumeration e = studentenliste.elements(); e.hasMoreElements();) {
				// Ausgeben des aktuellen Studenten
				// durch 'nextElement()' wird das naechste Objekt aufgerufen.
				Student student = (Student) e.nextElement();
				String name = student.getName();
				String vorname=student.getVorname();
				int punkte=student.getPunkte();
				String uni=student.getUniversitaet();

				// String str = new String();
				str = str + name + ", " + vorname + " ("+punkte+") "+ ", " +" Universitaet: "+uni +"\n";
			}
		} else {
			str = "Die Studentenliste konnte nicht ausgegeben werden" + "\n";

		}

		return str;
	}

}
